草庐IT

C++ Templates 多态障碍

全部标签

c++ - C++是否有不使用vtable的接口(interface)的静态多态实现?

C++是否有不使用vtable的正确接口(interface)实现?例如classBaseInterface{public:virtualvoidfunc()const=0;}classBaseInterfaceImpl:publicBaseInterface{public:voidfunc(){std::coutfunc();最后一行对func的调用转到vtable以查找BaseInterfaceImpl::func的funcptr,但是是否有任何C++方法可以直接执行此操作,因为BaseInterfaceImpl不是纯接口(interface)类之外的任何其他类的子类基础接口(in

c++ - 多态值得增加耦合吗?

我正在编写一个简单的游戏来学习更多的C++经验,我有一个想法,我觉得多态性几乎有效,但没有。在这个游戏中,Party通过Map相当线性地移动,但偶尔会遇到Fork在路上。fork(基本上)是一个std::vector.最初我打算将类似以下内容的代码写入aParty成员函数:if(!CurrLocation->fork_.empty())//Loopthroughforksandshowoptionstotheplayer,gowheres/hewantselse(CurrLocation++)但我想知道以下的某些变体是否会更好:CurrLocation=CurrLocation->ge

C++ 模板(泛型编程)与多态性?

我想通过说它与范式相关并且我只是想澄清一些概念来开始这个问题。所以我已经用Python编程大约2年了,我涉足Java但不是太多,我想深入研究C++。我以前用过它,但没有用于涉及大量设计的大型项目。当我第一次开始探索它时,我认为它处理OOP的方式与Java类似,在Java中一切都必须实现一个接口(interface)。然后我碰到了templates的概念,我立即认为它是为基元(ints、floats)提供多态行为的变通方法不实现它(基本上是Python通过鸭子类型和没有正式接口(interface)所做的)。但我很快发现模板用于为非基本类型提供相同的行为。所以我的问题是:有什么理由在模板

c++ - C++ 中的多态性和我的考试

几天前我参加了C++考试,我得到了这个问题,但我发现它对我来说不是很清楚,问题是:ExplainthedifferenceamongthetermsPolymorphism,virtualfunctionandoverriding.Byusingexamplegettingtheareaofshapeforrectangleandtriangle,writetwodifferentsnippetcodestoshowtheimplementationofpolymorphismandimplementationofpolymorphismandvirtualfunction.Givee

【C++】多态

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》🌝每一个不曾起舞的日子,都是对生命的辜负目录前言1.多态的概念2.多态的定义及细节 2.1虚函数2.2虚函数的重写 2.2.1虚函数重写的两个例外2.3普通调用和多态调用的区别 2.4『final』和『override』关键字(C++11)2.4.1『final』 2.4.2『override』2.5重载、重写(覆盖)、隐藏(重定义)的对比3.抽象类3.1概念3.2意义3.3『接口继承』和实现继承4.多态的原理4.1虚函数表4.2多态的原理4.3动态绑定和

c++ - 使用 dynamic_cast 而不是传统的多态有什么优势?

我们可以使用多态(继承+虚函数)来泛化不同的类型在一个共同的基类型下,然后引用不同的对象,就好像它们是相同的类型一样。使用dynamic_cast似乎是完全相反的方法,因为本质上我们在决定要采取什么操作之前检查对象的特定类型。是否有任何已知的例子说明某些东西不能像使用dynamic_cast那样容易地使用传统多态性来实现? 最佳答案 每当您发现自己想要基类中的成员函数(如“IsConcreteX”)时(编辑:或者更准确地说,是像“ConcreteX*GetConcreteX”这样的函数),您基本上是在实现自己的dynamic_cas

Java 多态

多态的思想:一个引用,引用的对象不一样,那么所表现的行为不一样,这种思想称为多态. 换句话说:当父类引用引用的对象不一样的时候表现出的行为是不一样的!!!!通过一个例子,我们先来感受一下: 定义两个类Animal和Cat,  在Cat类中重写了Animal的fun()方法,在main方法中new了一个Cat对象,并用Animal类的引用接收.classAnimal{publicintage;publicStringname;publicvoidfun(){System.out.println("Animal的fun()方法");}}classCatextendsAnimal{@Override

c++ - 避免空指针并保持多态性

在我的代码中,我只是注意到我经常需要检查nullptr,即使nullptr不应该是可能的(根据指定的要求)。但是,nullptr可能仍然会发生,因为其他人可能会发送一个nullptr并认为这是可以的(不幸的是不是每个人都读/写规范),并且除非在测试期间在运行时触发问题(并且高测试覆盖率很昂贵)。因此,它可能会导致客户报告很多发布后的错误。例如classdata{virtualvoidfoo()=0;};classdata_a:publicdata{public:virtualvoidfoo(){}};classdata_b:publicdata{public:virtualvoidfo

c++ - 用子类对象初始化的多态基类对象数组

抱歉,标题太复杂了。我有这样的东西:classBase{public:intSomeMember;Base():SomeMember(42){}virtualintGet(){returnSomeMember;}};classChildA:publicBase{public:virtualintGet(){returnSomeMember*2;}};classChildB:publicBase{public:virtualintGet(){returnSomeMember/2;}};classChildC:publicBase{public:virtualintGet(){return

C++ Templates 多态障碍

接口(interface):templateclassInterface{public:typedefTUnits;virtualTget()=0;};实现1:classImplementation1:publicInterface{public:floatget(){return0.0f;}};实现2:classImplementation2:publicInterface{public:intget(){return0;}};容器(有错误):classContainer{private:Interface*floatGetter;intn;Timer::Units*array;pu